<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //作业一：
      let o1 = {
        class: '164',
      }
      Object.defineProperty(o1, 'bj', {
        writable: false,
        value: '高二26班',
      })

      console.log(o1.bj)
      o1.bj = '高三32班'
      console.log('改写之后：', o1.bj)

      //作业二：
      //configurable:是否允许通过delete删除属性，是否修改属性的特性，是否允许把属性修改为访问器属性，默认为false
      //enumerable：是否可枚举，也就是否能通过fon-in循环返回属性，默认为false

      //configurable
      let obj = {}
      // Object.defineProperty(o, 'a', {
      //   configurable: false,
      //   value: 12,
      // })

      Object.defineProperty(obj, 'a', {
        configurable: true,
        value: 12,
      })

      console.log(obj.a)
      delete obj.a
      console.log(obj.a)

      //enumerable
      let person = {}
      Object.defineProperty(person, 'a', {
        enumerable: true,
        value: '图书信息',
      })
      for (let item in person) {
        console.log(person[item])
      }

      //第四题：
      // let o = {
      //   name: 'abc',
      // }
      //删除name属性
      //delete o.name
      //执行失败：未赋值的时候，属性未初始化的时候
      //console.log(o.name)

      //第六题
      function Person() {
        this.name = 'x'
        this.address = {
          province: 'guangdong',
          city: 'zhuhai',
        }
      }

      let p1 = new Person('a')
      let p2 = new Person('b')
      console.log(p1.name === p2.name)
      //上列代码输出x未定义
      //原因：字符串类型都需要加入引号进行定义，如果name属性加了引号则输出true
      p1.address.city = 'guangzhou'
      console.log(p1.address.city === p2.address.city)
      //加了引号，输出false，两者属性定义不成立
      //第七题：
      /*
      1、可以封装数据
      2、可以在get，set进行if判断，数据处理
      */
    </script>
  </body>
</html>
